import copy

# 定义一个名为Comment的类，包含三个属性：commentStr、startPos和endPos。
class Comment:
    commentStr = ''
    startPos = 0 # 记录注释的开始位置
    endPos = 0  # 记录注释的结束位置

def recognizer(code):
    """
    识别代码中的注释。
    
    Args:
        code (str): 待处理的代码字符串。
    
    Returns:
        list of Comment: 包含所有注释信息的列表。
    
    """
    outList = []

    comment = Comment()
    comment.commentStr = ''
    
    #用正则表达式匹配注释
    import re
    # pattern = r'/\*.*?\*/|//.*?$'   # 匹配单行注释和多行注释
    pattern = r'/\*.*?\*/|//.*'   # 匹配单行注释和多行注释
    for match in re.finditer(pattern, code):
        if match.group().startswith('/*'):
            comment.startPos = match.span()[0]
            comment.endPos = match.span()[1]-1
            comment.commentStr = match.group()
            outList.append(copy.deepcopy(comment))            
        if match.group().startswith('//'):
            comment.startPos = match.span()[0]
            comment.endPos = match.span()[1]-1
            comment.commentStr = match.group()
            outList.append(copy.deepcopy(comment)) 
    return outList
# 使用示例
#col 0-33: 多行注释结束,col 57-79: 单行注释
code = "/* This is a multi-line comment */int main() { // This is a single line comment\nreturn 0; }"
print(code)

print("Comments:")
cmt = recognizer(code)
for c in cmt:
    print(c.commentStr)
    print(c.startPos, c.endPos)
# print(cmt)
    
# exit()

#删除注释
def remove_comments(code, commentsList):
    """
    从代码字符串中移除注释。
    
    Args:
        code (str): 包含注释的代码字符串。
        commentsList (list of Comment): 包含所有注释信息的列表，每个注释对象都有 startPos 和 endPos 属性，
                                       分别表示注释在代码字符串中的起始和结束位置。
    
    Returns:
        str: 移除了注释后的代码字符串。
    
    """
    cmt = copy.deepcopy(commentsList)
    cmt.reverse()
    new_s = code
    for c in cmt:
        new_s = new_s[:c.startPos] + new_s[c.endPos+1:]
    return new_s

#删除注释后的代码
new_s = remove_comments(code, cmt)
print("\nCode without comments:")
print(new_s)